#include <malloc.h>
#include <iostream>
using namespace std;

int main()
{
     int x;
     x = 100;//赋初值
     cout<<x<<endl;

     const int y = 100;//定义了一个常量，初始化赋值
     // y = 200;//错误的，不能修改常量
     cout<<sizeof(y)<<endl;

     // int * p = &y;//错误的，因为尝试用一个整数指针指向一个常量整数的地址，类型不匹配
     
     const int * p = &y;//对的，定义一个常量整数的指针（常量指针），指向一个常量整数的地址
     // *p = 1000;//错误的，不能通过常量指针去修改所指向的内容

     const int * p1 = &x;//对的，可以用常量指针指向普通变量，但是该指针无法修改所指向的变量
     // *p1 = 1000;//错误的，不能通过常量指针修改所指向的内容
     // int cosnt * p2 = &x;//错误的，因为语法错误
     
     int * const p2 = &x;//定义了一个指针常量，指针自己是一个常量
     *p2 = 1000;
     int z = 1000;
     // p2 = &z;//错误的，因为p3自己是一个常量，它不能修改指向

     const int * const p3 = &y;//p3不能修改指向的内容，也不能修改自己的指向
     cout<<*p3<<endl;
     return 0;
}
